#pragma once
#include <string>
#include <vector>
#include <memory>
#include <unordered_map>

namespace schematic {

struct Point {
    double x;
    double y;
};

struct Pin {
    std::string name;
    Point position;
    std::string type;  // input, output, power, etc.
    std::string net_name;
};

class Component {
public:
    std::string name;
    std::string type;
    Point position;
    std::vector<Pin> pins;
    std::unordered_map<std::string, std::string> properties;
};

class Net {
public:
    std::string name;
    std::vector<Pin> connected_pins;
    std::string net_type;  // power, signal, etc.
};

class Schematic {
public:
    std::string name;
    std::vector<Component> components;
    std::vector<Net> nets;
};

} // namespace schematic 